/**
 * Three.js 项目管理系统 - 演示前端静态文件服务器
 * 独立的前端服务器，用于演示和展示
 * 端口: 7285
 * 无 Live Reload 功能（避免开发时的自动刷新）
 */

const express = require('express');
const path = require('path');
const os = require('os');
const fs = require('fs');

const app = express();
const PORT = 7285;

/**
 * 获取本机局域网IP地址
 */
function getLocalIPAddress() {
    const interfaces = os.networkInterfaces();
    for (const name of Object.keys(interfaces)) {
        for (const iface of interfaces[name]) {
            // 跳过内部和非IPv4地址
            if (iface.family === 'IPv4' && !iface.internal) {
                return iface.address;
            }
        }
    }
    return 'localhost';
}

/**
 * 检测项目模式
 */
function detectProjectMode() {
    const configPath = path.join(__dirname, 'project', 'config.json');
    try {
        if (fs.existsSync(configPath)) {
            const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
            return config.mode || 'unknown';
        }
    } catch (error) {
        console.error('配置文件读取失败:', error.message);
    }
    return 'unknown';
}

/**
 * 检测本地项目
 */
function detectLocalProject() {
    const projectDir = path.join(__dirname, 'project');
    try {
        if (fs.existsSync(projectDir)) {
            const items = fs.readdirSync(projectDir);
            const projectFolders = items.filter(item => {
                const itemPath = path.join(projectDir, item);
                return fs.statSync(itemPath).isDirectory() && 
                       item.startsWith('project-');
            });
            return projectFolders.length > 0 ? projectFolders[0] : null;
        }
    } catch (error) {
        console.error('项目文件夹检测失败:', error.message);
    }
    return null;
}

// 静态文件服务 - 提供前端所有文件
app.use(express.static(__dirname, {
    setHeaders: (res, filePath) => {
        // 设置 CORS 头，允许跨域访问
        res.set('Access-Control-Allow-Origin', '*');
        
        // 设置正确的 MIME 类型
        if (filePath.endsWith('.js')) {
            res.set('Content-Type', 'application/javascript');
        } else if (filePath.endsWith('.css')) {
            res.set('Content-Type', 'text/css');
        } else if (filePath.endsWith('.html')) {
            res.set('Content-Type', 'text/html');
        } else if (filePath.endsWith('.json')) {
            res.set('Content-Type', 'application/json');
        }
    }
}));

// 共享 Three.js 库（从编辑端）
app.use('/lib/three', express.static(path.join(__dirname, '../frontend-editor/lib/three')));

// 默认路由 - 直接进入查看器
app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, 'index.html'));
});

// 启动服务器
app.listen(PORT, '0.0.0.0', () => {
    const localIP = getLocalIPAddress();
    const mode = detectProjectMode();
    const localProject = detectLocalProject();
    
    console.log('');
    console.log('╔════════════════════════════════════════════════════════╗');
    console.log('║          ✅ 演示前端服务器已启动                       ║');
    console.log('╚════════════════════════════════════════════════════════╝');
    console.log('');
    
    // 简化状态显示
    let statusInfo = '💡 端口 7285';
    if (mode === 'offline') {
        statusInfo += ' | 📦 离线模式';
        if (localProject) statusInfo += ` | ${localProject}`;
    } else if (mode === 'online') {
        statusInfo += ' | 🌐 在线模式';
    }
    console.log(statusInfo);
    console.log('');
    console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
    console.log('🌐 访问地址（点击可直接打开）');
    console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
    console.log('');
    console.log(`   本地:     http://localhost:${PORT}/`);
    console.log(`   局域网:   http://${localIP}:${PORT}/`);
    console.log('');
    console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
    console.log('');
});
